<?php

namespace app\common\queue;

use think\queue\Job;
use think\Db;
class Task
{
    public function fire(Job $job, $data)
    {
        //....这里执行具体的任务 
        try {
            if ($this->doTask()) {
                print('任务执行完成'.PHP_EOL);
                //如果任务执行成功后 记得删除任务，不然这个任务会重复执行，直到达到最大重试次数后失败后，执行failed方法
                $job->delete();
            } else {
                print('任务执行失败，已延迟'.PHP_EOL);
                print('执行次数：'.$job->attempts().PHP_EOL);
                $job->release(1); //$delay为延迟时间

                if ($job->attempts() > 2) {
                    //通过这个方法可以检查这个任务已经重试了几次了
                    print('任务执行最大次数'.PHP_EOL);
                    $job->delete();
                    $job->failed();
                }
            }
        } catch (\Exception $e) {
            print('任务执行错误'.PHP_EOL);
            $job->failed();
        }

        
    }

    public function failed($data)
    {
        print('任务执行失败-调用'.var_export($data,true));
    }

    private function doTask()
    {
       
        return false;
    }

    /**
     * 初始化
     *
     * @return void
     */
    private function breakConnectDatabase()
    {
        $config = config('database.');
        $config['break_reconnect'] = true;
        Db::init($config);
    }
}
